package com.turato.table.processor;


import com.turato.table.model.TableMappingEnum;

import java.util.HashMap;

/**
 * @author tuhao
 * @date 2021/1/16 3:54 下午
 * @desc 表驱动模式(策略模式)
 *
 * 对于逻辑表达模式固定的 if...else 代码，可以通过某种映射关系，将逻辑表达式用表格的方式表示；
 * 再使用表格查找的方式，找到某个输入所对应的处理函数，使用这个处理函数进行运算。
 *
 * 逻辑表达模式固定的 if...else
 *
 */
public class ActionProcessor {


    private HashMap<TableMappingEnum, Action> handlers;

    class Action {
        public void doAction() {

        }
    }

    /**
     * 策略1
     */
    class ActionOne extends Action {
        @Override
        public void doAction() {
            System.out.println("-----ActionOne-----");
        }
    }

    /**
     * 策略2
     */
    class ActionTwo extends Action {
        @Override
        public void doAction() {
            System.out.println("-----ActionTwo-----");
        }
    }

    /**
     * 策略3
     */
    class ActionThree extends Action {
        @Override
        public void doAction() {
            System.out.println("-----ActionThree-----");
        }
    }

    /**
     * 初始化
     */
    public ActionProcessor() {
        // 初始化动作
        handlers = new HashMap<TableMappingEnum, Action>();
        handlers.put(TableMappingEnum.ACTION_ONE, new ActionOne());
        handlers.put(TableMappingEnum.ACTION_TWO, new ActionTwo());
        handlers.put(TableMappingEnum.ACTION_THREE, new ActionThree());
    }

    public void process(TableMappingEnum TableMappingEnum) {
        handlers.get(TableMappingEnum).doAction();
    }
}
